import pymysql
from dbutils.pooled_db import PooledDB
from best_seller.config import config


class MySQLConnectionPool:
    def __init__(self):
        db_config = config.get_database_config()
        self.pool = PooledDB(
            creator=pymysql,  # 使用 pymysql 作为数据库连接的创建者
            mincached=db_config.get('mincached', 2),  # 连接池中空闲连接的初始数量
            maxcached=db_config.get('maxcached', 5),  # 连接池中空闲连接的最大数量
            maxshared=db_config.get('maxshared', 3),  # 共享连接的最大数量
            maxconnections=db_config.get('maxconnections', 10),  # 连接池允许的最大连接数
            blocking=db_config.get('blocking', True),  # 连接池达到最大连接数时是否阻塞
            maxusage=db_config.get('maxusage', None),  # 一个连接最多被重复使用的次数
            host=db_config.get('host', 'localhost'),
            user=db_config.get('user', 'root'),
            password=db_config.get('password', 'password'),
            database=db_config.get('database', 'default_db'),
            charset=db_config.get('charset', 'utf8mb4')
        )

    def get_connection(self):
        return self.pool.connection()

    def release_connection(self, conn):
        if conn:
            conn.close()


# 创建单例连接池实例
conn_pool = MySQLConnectionPool()


if __name__ == '__main__':
    # 测试连接池
    conn = conn_pool.get_connection()
    cursor = conn.cursor()
    cursor.execute('SELECT version()')
    result = cursor.fetchone()
    print(result)
    conn_pool.release_connection(conn)